Ionizing radiation such as alpha particles have the unfortunate ability to change the electrical state of electronic devices, often causing soft errors that may prevent such devices from operating properly. Often times designers will attempt to soft-error-proof an electronic device by employing redundancy coupled with voting circuitry in their designs to ensure that errant behavior is unlikely. Thus, rather than using a single logic circuit to compute a result, multiple redundant logic circuits are used, and the results are compared by separate voting circuitry to determine the correct result from among the results output by the redundant logic circuits.
Redundant circuitry, however, occupies valuable area on an integrated circuit chip and often increases power consumption substantially. This area and power consumption increase may also reduce the overall performance of an electronic device, since clock frequency may need to be reduced for a variety of reasons, including the need to accommodate the longer wires needed for larger circuit areas.
Redundant circuitry may be employed at a number of levels within the design of an electronic device, including, for example, within an execution unit of a processor. An execution unit constitutes the logic that executes the instructions that are supplied to a processor. And, whereas processors once included only a single execution unit, given the increased focus on parallelism in modern processor architectures, an execution unit is often one of many execution units that may be present on a given integrated circuit chip.
For example, at the chip level, multiple processor cores are often disposed on the same chip, functioning in much the same manner as separate processor chips, or to some extent, as completely separate computers. In addition, even within cores, parallelism is employed through the use of multiple execution units that are specialized to handle certain types of operations, e.g., fixed point or floating point operations. Superscalar architectures may also utilize multiple redundant execution units so that multiple instructions can be dispatched to different execution units in a given clock cycle. Pipelining is also employed in many instances so that certain operations that may take multiple clock cycles to perform are broken up into stages, enabling other operations to be started prior to completion of earlier operations. Multithreading is also employed to enable multiple instruction streams to be processed in parallel, enabling more overall work to performed in any given clock cycle.
Particularly with pipelined execution units, the circuit area required to implement redundant circuitry within certain stages of a pipeline, as well as the additional latency required to implement voting, can have an adverse impact on both the overall area and the performance of an execution unit. Furthermore, when multiple execution units are used in a given design, the adverse impacts are compounded.
Therefore, a need continues to exist in the art for a manner of protecting a circuit design from the adverse effects of ionizing radiation without the increased circuit area and decreased performance traditionally associated with redundant logic.